package com.jdbc_.utils;

import java.io.FileInputStream;
import java.io.IOException;
import java.sql.*;
import java.util.Properties;

// 这是一个工具类，用来完成mysql的获取连接和关闭连接的操作
public class JDBCUtils {
    // 定义相关属性，因为只需要一份，所以做成静态的
    private static String user;  // 用户名
    private static String password;  // 密码
    private static String url;  // 数据库url
    private static String driver;  // 驱动：com.mysql.jdbc.Driver

    // 在static代码块对属性进行初始化
    static {
        try {
            // 读取配置文件的信息
            Properties properties = new Properties();
            properties.load(new FileInputStream("src\\com\\jdbc_\\mysql.properties"));
            user = properties.getProperty("user");
            password = properties.getProperty("password");
            url = properties.getProperty("url");
            driver = properties.getProperty("driver");
        } catch (IOException e) {
            // 将编译异常转换成运行异常
            // 方便调用者可以选择捕获该异常，或者选择默认处理该异常，比较方便
            throw new RuntimeException(e);
        }
    }

    // 获取连接
    public static Connection getConnection() {
        try {
            Class.forName(driver);  // 注册驱动，建议写上
            return DriverManager.getConnection(url, user, password);  // 得到连接，并返回
        } catch (SQLException | ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
    }

    // 关闭连接
    /*
        可能要关闭的相关资源：
        1、ResultSet结果集
        2、Statement或者PreparedStatement
        3、Connection
        如果需要关闭某个资源，就传入对应的对象，否则为null
     */
    public static void close(ResultSet resultSet, Statement statement, Connection connection) {
        try {
            // 判断是否为null
            if (resultSet != null) {
                resultSet.close();
            }
            if (statement != null) {
                statement.close();
            }
            if (connection != null) {
                connection.close();
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }

    }
}
